package com.lzh.others.object;

/**
 * effective java
 * 相等的对象必须具有相等的散列码
 * 重写equal()场景： 一个类有自己的逻辑相等概念，不同于原本的对象地址相等
 * 重写equal()推荐写法：
 * 使用instanceof操作符检查实参是否为正确的类型
 * <p>
 * <p>
 * 概念：
 * 1:原语类型域：8种原始类型 : short,int,long,double,float,char,byte,boolean
 *
 * @Description:
 * @Author: LiuZiHao
 * @Date: 2022/5/11 15:53
 */
public class TestEqualsAndHashCode {

    public class Test {
        private int num;
        private String data;

        public Test() {
        }

        public Test(int num, String data) {
            this.num = num;
            this.data = data;
        }

        public int getNum() {
            return num;
        }

        public void setNum(int num) {
            this.num = num;
        }

        public String getData() {
            return data;
        }

        public void setData(String data) {
            this.data = data;
        }

        @Override
        public boolean equals(Object obj) {
            return super.equals(obj);
        }

        @Override
        public int hashCode() {
            return super.hashCode();
        }
    }

    public static void main(String[] args) {
        Object obj = new Object();
        //hashcode() equals() 定义在 所有类的基类Object里
        //hashCode()方法用来给对象获取唯一的一个整数。被存储在HashTable类似的结构中。默认的，Object类的hashCode()方法
        //返回这个对象存储的内存地址的编号
        float f1 = 10.5f;
        float f2 = 10.50f;
        int i1 = Float.floatToIntBits(f1);
        int i2 = Float.floatToIntBits(f2);
        System.out.println("i1 = " + i1);
        System.out.println("i2 = " + i2);
        System.out.println(f1 == f2);
    }
}
